package com.hqq.exercise.stack_queue;

import java.util.Stack;

/**
 * TwoStackToQueue 用两个栈实现队列
 * 题目描述:
 * 用两个栈实现一个队列，实现对了的两个函数appendTail和deleteHead，分别完成在队列尾插入结点和在队列头部删除结点的功能。
 * 思路:
 * 入队的时候直接添加进stackTail
 * 出队的时候先将stackHead出队 再把stackTail的元素倒入stackHead再出队
 * Created by heqianqian on 2017/8/10.
 */
public class TwoStackToQueue<T> {

    /**
     * 队尾取出元素
     */
    private Stack<T> stackHead;
    /**
     * 队头插入元素
     */
    private Stack<T> stackTail;

    public TwoStackToQueue() {
        stackHead = new Stack<>();
        stackTail = new Stack<>();
    }

    /**
     * 实现在队尾添加
     * 入队的时候直接添加进stackTail
     */
    public void appendTail(T t) {
        stackTail.push(t);
    }

    /**
     * 出队的时候先将stackHead出队 再把stackTail的元素倒入stackHead再出队
     */
    public T deleteHead() {
        if (stackHead.empty()) {
            if (stackTail.empty()) {
                throw new RuntimeException("队列为空!");
            } else {
                while (!stackTail.empty()){
                    stackHead.add(stackTail.pop());
                }
            }
        }
        return stackHead.pop();
    }

    /**
     * @return 队列元素个数
     */
    public int size() {
        return stackHead.size() + stackTail.size();
    }

}
